package com.xm.bean;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class LifecycleDemoBean implements InitializingBean, DisposableBean {

    private String message;

    static {
        System.out.println("执行静态方法。。");
    }

    // 1. 构造方法
    public LifecycleDemoBean() {
        System.out.println("1. 构造函数执行 - 实例化");
    }

    // 2. 属性注入
    public void setMessage(String message) {
        this.message = message;
        System.out.println("2. 属性注入: message = " + message);
    }

    // 3. @PostConstruct 注解方法
    @PostConstruct
    public void postConstruct() {
        System.out.println("4. @PostConstruct 方法执行");
    }

    // 4. InitializingBean 接口实现
    @Override
    public void afterPropertiesSet() {
        System.out.println("5. InitializingBean.afterPropertiesSet() 执行");
    }

    // 5. 自定义初始化方法（XML/注解配置）
    public void customInit() {
        System.out.println("6. 自定义 init-method 执行");
    }

    // 6. @PreDestroy 注解方法
    @PreDestroy
    public void preDestroy() {
        System.out.println("8. @PreDestroy 方法执行");
    }

    // 7. DisposableBean 接口实现
    @Override
    public void destroy() {
        System.out.println("9. DisposableBean.destroy() 执行");
    }

    // 8. 自定义销毁方法（XML/注解配置）
    public void customDestroy() {
        System.out.println("10. 自定义 destroy-method 执行");
    }
    public void customDestroy2() {
        System.out.println("11. 自定义 destroy-method 执行");
    }

    public void doWork() {
        System.out.println("7. Bean 使用中: " + message);
    }
}